package cn.sxt.queue.consumer;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * 队列的消费者
 *
 * @author Mxb
 * @version 1.0
 * @date 2020/6/10 14:06
 */
public class TestMessageConsumer {
    //地址在mq conf activemq.xml里面找
    //private static final String BROKER_URL = "tcp://39.99.166.61:61616";
    private static final String BROKER_URL = "tcp://localhost:61616";

    private static final String QUEUE_NAME = "mq-name-queue";

    public static void main(String[] args) throws JMSException {
        //第一步：创建ConnectionFactory对象，需要指定服务端ip及端口号。
        ConnectionFactory factory = new ActiveMQConnectionFactory(BROKER_URL);

        //第二步：使用ConnectionFactory对象创建一个Connection对象。
        Connection connection = factory.createConnection();
        //第三步：开启连接，调用Connection对象的start方法。
        connection.start();

        //第四步：使用Connection对象创建一个Session对象。
        //第一个参数：是否开启事务。true：开启事务，第二个参数忽略。
        //第二个参数：当第一个参数为false时，才有意义。消息的应答模式。1、自动应答2、手动应答。一般是自动应答。
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

        //第五步：使用Session对象创建一个Destination对象（topic、queue），此处创建一个Queue对象。
        //创建目的地
        Queue queue = session.createQueue(QUEUE_NAME);

        //第六步：使用Session对象创建一个MessageConsumer对象。
        MessageConsumer consumer = session.createConsumer(queue);
        // 第七步：使用consumer接收消息
        /***
         * receive的说明  默认没参数是一直等待
         * receive(long time)   time代表阻塞时长，时间一过，不等了
         */
        while (true) {
            //TextMessage message = (TextMessage) consumer.receive(2000); //因为前后发送的是TextMesssage
            TextMessage message = (TextMessage) consumer.receive(); //因为前后发送的是TextMesssage
            //第八步：输出消息
            if (message != null) {
                System.out.println(message.getText());
            } else {
                break;
            }
        }

        // 第九步：关闭资源。
        consumer.close();
        session.close();
        connection.close();
        System.out.println("消息消费成功");
    }

}
